package controllers;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.event.AjaxBehaviorEvent;

import modelo.Barrio;
import modelo.Domicilio;
import modelo.Empresa;
import modelo.Localidad;
import modelo.Pais;
import modelo.Persona;
import modelo.Propietario;
import modelo.Provincia;
import modelo.Telefonoempresa;
import modelo.Tipodocumento;
import modelo.Tipotelefono;
import modelo.Usuario;
import services.BarrioService;
import services.LocalidadService;
import services.PaisService;
import services.PropietarioService;
import services.ProvinciaService;
import services.TipoDocumentoService;
import services.TipoTelefonoService;


@ManagedBean
@SessionScoped
public class PropietarioBean implements Serializable{

	private static final long serialVersionUID = -2127116018303408944L;

	@ManagedProperty("#{tipoDocumentoService}")
	private TipoDocumentoService tipoDocumentoService;
	private Tipodocumento tipoDocumento = new Tipodocumento();
	private Tipodocumento tipoDocumentoSelected = new Tipodocumento();
	private List<Tipodocumento> listTipoDocumentos = new ArrayList<Tipodocumento>();
	private List<Tipodocumento> listTipoDocumentosSeleccionadas = new ArrayList<Tipodocumento>();

	@ManagedProperty("#{paisService}")
    private PaisService service;
	List<Pais> listPaises = new ArrayList<Pais>();
	private Pais selectedPais=new Pais();
	
	@ManagedProperty("#{provinciaService}")
	private ProvinciaService serviceProvincia;
	private List<Provincia> listProvincia = new ArrayList<Provincia>();
	private Provincia provinciaSelected = new Provincia();
	
	@ManagedProperty("#{localidadService}")
	private LocalidadService serviceLocalidad;
	private List<Localidad> listLocalidad = new ArrayList<Localidad>();
	private Localidad localidadSelected = new Localidad();

	@ManagedProperty("#{barrioService}")
	private BarrioService serviceBarrio;
	private List<Barrio> listBarrio = new ArrayList<Barrio>();
	private Barrio barrioSelected = new Barrio();
	
	@ManagedProperty("#{tipoTelefonoService}")
	private TipoTelefonoService serviceTipoTelefono;
	private List<Tipotelefono> listTipoTelefono = new ArrayList<Tipotelefono>();
	private Tipotelefono tipoTelefonoSelected = new Tipotelefono();	
	
	private Telefonoempresa telefonoEmpresa;
	private List<Telefonoempresa> listTelefonoEmpresa;
	private Telefonoempresa telefonoEmpresaSelected;
	
	private Domicilio domicilio = new Domicilio();
//	private Telefono telefono=new Telefono();
	private Usuario usuario;
	private Empresa empresa=new Empresa();
	private Persona persona=new Persona();
	
	@ManagedProperty("#{propietarioService}")
	private PropietarioService servicePropietario;
	private Propietario propietario=new Propietario();

	private List<Propietario> listaTabla;
	private List<Propietario> listaTablaFiltrada;
	private Propietario propietarioSelected;

	public PropietarioBean() {
		super();
		telefonoEmpresa = new Telefonoempresa();
		listTelefonoEmpresa = new ArrayList<Telefonoempresa>();
		telefonoEmpresaSelected = new Telefonoempresa();
		listaTabla=new ArrayList<Propietario>();
		listaTablaFiltrada=new ArrayList<Propietario>();
		propietarioSelected=new Propietario();
		usuario=new Usuario();
	}

	@PostConstruct
	private void init() {
		
		listTipoDocumentos = tipoDocumentoService.getListaTipoDocumento();
		listPaises = service.getListaPais();
		listProvincia=serviceProvincia.getListaProvincia();
		listLocalidad=serviceLocalidad.getListaLocalidades();
		listBarrio=serviceBarrio.getListaBarrio();
		listTipoTelefono = serviceTipoTelefono.getListaTiposTelefonos();
		listaTabla=servicePropietario.getListaPropietario();
	}
	
	public Propietario getPropietario() {
		return propietario;
	}

	public void setPropietario(Propietario propietario) {
		this.propietario = propietario;
	}

//	public Telefono getTelefono() {
//		return telefono;
//	}
//
//	public void setTelefono(Telefono telefono) {
//		this.telefono = telefono;
//	}

	public Domicilio getDomicilio() {
		return domicilio;
	}

	public void setDomicilio(Domicilio domicilio) {
		this.domicilio = domicilio;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public Empresa getEmpresa() {
		return empresa;
	}

	public void setEmpresa(Empresa empresa) {
		this.empresa = empresa;
	}

	public List<Propietario> getListaTabla() {
		return listaTabla;
	}

	public void setListaTabla(List<Propietario> listaTabla) {
		this.listaTabla = listaTabla;
	}

	public List<Propietario> getListaTablaFiltrada() {
		return listaTablaFiltrada;
	}

	public void setListaTablaFiltrada(List<Propietario> listaTablaFiltrada) {
		this.listaTablaFiltrada = listaTablaFiltrada;
	}
	
	Usuario usuario1 = new Usuario();
	
	
	public Usuario getUsuario1() {
		return usuario1;
	}

	public void setUsuario1(Usuario usuario1) {
		this.usuario1 = usuario1;
	}

	public TipoDocumentoService getTipoDocumentoService() {
		return tipoDocumentoService;
	}

	public void setTipoDocumentoService(TipoDocumentoService tipoDocumentoService) {
		this.tipoDocumentoService = tipoDocumentoService;
	}

	public Tipodocumento getTipoDocumento() {
		return tipoDocumento;
	}

	public void setTipoDocumento(Tipodocumento tipoDocumento) {
		this.tipoDocumento = tipoDocumento;
	}

	public Tipodocumento getTipoDocumentoSelected() {
		return tipoDocumentoSelected;
	}

	public void setTipoDocumentoSelected(Tipodocumento tipoDocumentoSelected) {
		this.tipoDocumentoSelected = tipoDocumentoSelected;
	}

	public List<Tipodocumento> getListTipoDocumentos() {
		return listTipoDocumentos;
	}

	public void setListTipoDocumentos(List<Tipodocumento> listTipoDocumentos) {
		this.listTipoDocumentos = listTipoDocumentos;
	}

	public List<Tipodocumento> getListTipoDocumentosSeleccionadas() {
		return listTipoDocumentosSeleccionadas;
	}

	public void setListTipoDocumentosSeleccionadas(
			List<Tipodocumento> listTipoDocumentosSeleccionadas) {
		this.listTipoDocumentosSeleccionadas = listTipoDocumentosSeleccionadas;
	}

	public PaisService getService() {
		return service;
	}

	public void setService(PaisService service) {
		this.service = service;
	}

	public List<Pais> getListPaises() {
		return listPaises;
	}

	public void setListPaises(List<Pais> listPaises) {
		this.listPaises = listPaises;
	}

	public Pais getSelectedPais() {
		return selectedPais;
	}

	public void setSelectedPais(Pais selectedPais) {
		this.selectedPais = selectedPais;
	}

	public ProvinciaService getServiceProvincia() {
		return serviceProvincia;
	}

	public void setServiceProvincia(ProvinciaService serviceProvincia) {
		this.serviceProvincia = serviceProvincia;
	}

	public List<Provincia> getListProvincia() {
		return listProvincia;
	}

	public void setListProvincia(List<Provincia> listProvincia) {
		this.listProvincia = listProvincia;
	}

	public Provincia getProvinciaSelected() {
		return provinciaSelected;
	}

	public void setProvinciaSelected(Provincia provinciaSelected) {
		this.provinciaSelected = provinciaSelected;
	}

	public LocalidadService getServiceLocalidad() {
		return serviceLocalidad;
	}

	public void setServiceLocalidad(LocalidadService serviceLocalidad) {
		this.serviceLocalidad = serviceLocalidad;
	}

	public List<Localidad> getListLocalidad() {
		return listLocalidad;
	}

	public void setListLocalidad(List<Localidad> listLocalidad) {
		this.listLocalidad = listLocalidad;
	}

	public Localidad getLocalidadSelected() {
		return localidadSelected;
	}

	public void setLocalidadSelected(Localidad localidadSelected) {
		this.localidadSelected = localidadSelected;
	}

	public BarrioService getServiceBarrio() {
		return serviceBarrio;
	}

	public void setServiceBarrio(BarrioService serviceBarrio) {
		this.serviceBarrio = serviceBarrio;
	}

	public List<Barrio> getListBarrio() {
		return listBarrio;
	}

	public void setListBarrio(List<Barrio> listBarrio) {
		this.listBarrio = listBarrio;
	}

	public Barrio getBarrioSelected() {
		return barrioSelected;
	}

	public void setBarrioSelected(Barrio barrioSelected) {
		this.barrioSelected = barrioSelected;
	}	
	
	public void cambiarComboProvincia(AjaxBehaviorEvent event){
		listProvincia.removeAll(listProvincia);
    	listProvincia=serviceProvincia.getListaProvincias(selectedPais);

	}
	
	public void cambiarComboLocalidad(AjaxBehaviorEvent event){
		listLocalidad.removeAll(listLocalidad);
		if(provinciaSelected!=null)
		   listLocalidad=serviceLocalidad.getListaLocalidades(provinciaSelected);
	}	
	
	public void cambiarComboBarrio(AjaxBehaviorEvent event){
		listBarrio.removeAll(listBarrio);
		if(localidadSelected!=null)
		   listBarrio=serviceBarrio.getListaBarrios(localidadSelected);
	}		
	
	public void agregarTelefonoSeleccionado() {
		telefonoEmpresa.setTipotelefono(tipoTelefonoSelected);
		listTelefonoEmpresa.add(telefonoEmpresa);
		telefonoEmpresa = new Telefonoempresa();
	}

	public TipoTelefonoService getServiceTipoTelefono() {
		return serviceTipoTelefono;
	}

	public void setServiceTipoTelefono(TipoTelefonoService serviceTipoTelefono) {
		this.serviceTipoTelefono = serviceTipoTelefono;
	}

	public List<Tipotelefono> getListTipoTelefono() {
		return listTipoTelefono;
	}

	public void setListTipoTelefono(List<Tipotelefono> listTipoTelefono) {
		this.listTipoTelefono = listTipoTelefono;
	}

	public Tipotelefono getTipoTelefonoSelected() {
		return tipoTelefonoSelected;
	}

	public void setTipoTelefonoSelected(Tipotelefono tipoTelefonoSelected) {
		this.tipoTelefonoSelected = tipoTelefonoSelected;
	}

	public Telefonoempresa getTelefonoEmpresa() {
		return telefonoEmpresa;
	}

	public void setTelefonoEmpresa(Telefonoempresa telefonoEmpresa) {
		this.telefonoEmpresa = telefonoEmpresa;
	}

	public List<Telefonoempresa> getListTelefonoEmpresa() {
		return listTelefonoEmpresa;
	}

	public void setListTelefonoEmpresa(List<Telefonoempresa> listTelefonoEmpresa) {
		this.listTelefonoEmpresa = listTelefonoEmpresa;
	}

	public Telefonoempresa getTelefonoEmpresaSelected() {
		return telefonoEmpresaSelected;
	}

	public void setTelefonoEmpresaSelected(Telefonoempresa telefonoEmpresaSelected) {
		this.telefonoEmpresaSelected = telefonoEmpresaSelected;
	}
	
	public void eliminarTelefono() {
		this.listTelefonoEmpresa.remove(telefonoEmpresaSelected);
		
	}	
	
	public String guardarPropietario() throws Exception{
//		serviceSalon.guardarSalon(salon, domicilio);
		persona.setTipodocumento(tipoDocumentoSelected);
		domicilio.setBarrio(barrioSelected);
		servicePropietario.guardarPropietario(usuario,persona, empresa, domicilio, listTelefonoEmpresa);
		return "PropietarioRegistrado";
	}

	public PropietarioService getServicePropietario() {
		return servicePropietario;
	}

	public void setServicePropietario(PropietarioService servicePropietario) {
		this.servicePropietario = servicePropietario;
	}

	public Persona getPersona() {
		return persona;
	}

	public void setPersona(Persona persona) {
		this.persona = persona;
	}

	public Propietario getPropietarioSelected() {
		return propietarioSelected;
	}

	public void setPropietarioSelected(Propietario propietarioSelected) {
		this.propietarioSelected = propietarioSelected;
	}
	
	
	}
